import numpy as np
import matplotlib.pyplot as plt
import cv2
image = cv2.imread("466-cw3image.jpg", cv2.IMREAD_GRAYSCALE) #cv2.CV_LOAD_IMAGE_GRAYSCALE
plt.imshow(image, cmap="gray")
plt.show()
#blurred = np.array([
#cv2.medianBlur(image, 3),
#cv2.medianBlur(image, 5),
#cv2.medianBlur(image, 7)])
blurred = cv2.medianBlur(image,11)
plt.rcParams["figure.figsize"] = 15, 30
plt.subplot(3,1,1),plt.imshow(blurred, cmap="gray"),plt.title('MeanFiltered')
blurred = cv2.medianBlur(blurred, 7)
plt.subplot(3,1,2),plt.imshow(blurred, cmap="gray")
blurred = cv2.medianBlur(blurred, 5)
plt.subplot(3,1,3),plt.imshow(blurred, cmap="gray")
plt.show()
blurred = cv2.medianBlur(image, 11)
edged = cv2.Canny(blurred, 30, 150)
plt.imshow(edged, "gray")
plt.show()
blurred = cv2.medianBlur(blurred, 7)
edged = cv2.Canny(blurred, 30, 150)
plt.imshow(edged, "gray")
plt.show()
blurred = cv2.medianBlur(blurred, 5)
edged = cv2.Canny(blurred, 30, 150)
plt.imshow(edged, "gray")
plt.show()
blurred = cv2.medianBlur(image, 11)
lap = cv2.Laplacian(blurred, cv2.CV_64F)
lap = np.uint8(np.absolute(lap))
plt.imshow(lap, "gray")
plt.show()
blurred = cv2.medianBlur(blurred, 7)
lap = cv2.Laplacian(blurred, cv2.CV_64F)
lap = np.uint8(np.absolute(lap))
plt.imshow(lap, "gray")
plt.show()
blurred = cv2.medianBlur(blurred, 5)
lap = cv2.Laplacian(blurred, cv2.CV_64F)
lap = np.uint8(np.absolute(lap))
plt.imshow(lap, "gray")
plt.show()
blurred = cv2.medianBlur(image, 11)
sobelX = cv2.Sobel(blurred, cv2.CV_64F, 1, 0)
sobelY = cv2.Sobel(blurred, cv2.CV_64F, 0, 1)
sobelX = np.uint8(np.absolute(sobelX))
sobelY = np.uint8(np.absolute(sobelY))
sobelCombined = cv2.bitwise_or(sobelX, sobelY)
plt.subplot(1,3,1),plt.imshow(sobelX, cmap="gray"),plt.title("Sobel X")
plt.subplot(1,3,2),plt.imshow(sobelY, cmap="gray"),plt.title("Sobel Y")
plt.subplot(1,3,3),plt.imshow(sobelCombined, cmap="gray"),plt.title("Sobel Combined")
plt.show()
# second pass
blurred = cv2.medianBlur(blurred, 7)
sobelX = cv2.Sobel(blurred, cv2.CV_64F, 1, 0)
sobelY = cv2.Sobel(blurred, cv2.CV_64F, 0, 1)
sobelX = np.uint8(np.absolute(sobelX))
sobelY = np.uint8(np.absolute(sobelY))
sobelCombined = cv2.bitwise_or(sobelX, sobelY)
plt.subplot(1,3,1),plt.imshow(sobelX, cmap="gray"),plt.title("Sobel X")
plt.subplot(1,3,2),plt.imshow(sobelY, cmap="gray"),plt.title("Sobel Y")
plt.subplot(1,3,3),plt.imshow(sobelCombined, cmap="gray"),plt.title("Sobel Combined")
plt.show()
# third pass
blurred = cv2.medianBlur(blurred, 5)
sobelX = cv2.Sobel(blurred, cv2.CV_64F, 1, 0)
sobelY = cv2.Sobel(blurred, cv2.CV_64F, 0, 1)
sobelX = np.uint8(np.absolute(sobelX))
sobelY = np.uint8(np.absolute(sobelY))
sobelCombined = cv2.bitwise_or(sobelX, sobelY)
plt.subplot(1,3,1),plt.imshow(sobelX, cmap="gray"),plt.title("Sobel X")
plt.subplot(1,3,2),plt.imshow(sobelY, cmap="gray"),plt.title("Sobel Y")
plt.subplot(1,3,3),plt.imshow(sobelCombined, cmap="gray"),plt.title("Sobel Combined")
plt.show()
blurred = cv2.bilateralFilter(image, 5, 31, 31)
blurred = cv2.medianBlur(blurred, 11)
plt.imshow(blurred, "gray")
plt.show()
sobelX = cv2.Sobel(blurred, cv2.CV_64F, 1, 0)
sobelY = cv2.Sobel(blurred, cv2.CV_64F, 0, 1)
sobelX = np.uint8(np.absolute(sobelX))
sobelY = np.uint8(np.absolute(sobelY))
sobelCombined = cv2.bitwise_or(sobelX, sobelY)
plt.subplot(1,3,1),plt.imshow(sobelX, cmap="gray"),plt.title("Sobel X")
plt.subplot(1,3,2),plt.imshow(sobelY, cmap="gray"),plt.title("Sobel Y")
plt.subplot(1,3,3),plt.imshow(sobelCombined, cmap="gray"),plt.title("Sobel Combined")
plt.show()
plt.subplot(1,2,1),plt.imshow(sobelCombined, "gray")
plt.subplot(1,2,2),plt.hist(sobelCombined.ravel(), 256)
plt.show()
kernel = np.ones((5,5),np.uint8)
dilation = cv2.dilate(lap,kernel,iterations = 1)
opening = cv2.morphologyEx(lap, cv2.MORPH_OPEN, kernel)
closing = cv2.morphologyEx(lap, cv2.MORPH_CLOSE, kernel)
plt.subplot(1,3,1),plt.imshow(dilation, cmap="gray"),plt.title("dilation")
plt.subplot(1,3,2),plt.imshow(opening, cmap="gray"),plt.title("opening")
plt.subplot(1,3,3),plt.imshow(closing, cmap="gray"),plt.title("closing")
plt.show()
blurred = cv2.GaussianBlur(blurred, (11, 11), 0)
plt.imshow(blurred, "gray")
plt.show()
edged = cv2.Canny(blurred, 30, 150)
plt.imshow(edged, "gray")
plt.show()